/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * panelPrincipal.java
 *
 * Created on 10/09/2011, 15:55:00
 */
package tsb.arrastrar;

import java.awt.*;
import java.util.LinkedList;

import java.awt.Toolkit;
import java.awt.geom.Line2D;
import java.util.Iterator;
import java.util.Vector;

public class PanelPrincipalV2 extends javax.swing.JPanel {
    
    public static final int cursorPredeterminado=1;
    public static final int cursorMovimiento=2;
    public static final int cursorCruz=3;
    public static final int cursorMano=4;
    public static final int cursorEsperar=5;
    public static final int cursorImagen=6;
    
    private boolean arratrarDispositivo= false; //para saber si se esta arrastrando un dispositivo
    private boolean seEstaConectando=false; //para saber si se esta conectando
    
    
    
    private Conexion ConexionActual;
    private LinkedList<Conexion> coneccionesActuales = new LinkedList<Conexion>();
    private Graphics gc;
    private Point ini, fin;
    
   
    private LinkedList<Conexion> listaConexiones = new LinkedList<Conexion>();
    

    
    public PanelPrincipalV2() {
        
        ini = new Point(1,1);
        fin=ini;
        initComponents();
    }

    public boolean isArratrarDispositivo() {
        return arratrarDispositivo;
    }

    public void setArratrarDispositivo(boolean arratrarDispositivo) {
        this.arratrarDispositivo = arratrarDispositivo;
    }

    public boolean getSeEstaConectando() {
        return seEstaConectando;
    }

    public void setSeEstaConectando(boolean conexion) {
        this.seEstaConectando = conexion;
    }

    public Conexion getConexionActual() {
        return ConexionActual;
    }

    public void setConexionActual(Conexion ConexionActual) {
        this.ConexionActual = ConexionActual;
    }
    
    public void addConexion(Conexion c)
    {
        this.listaConexiones.add(c);
    }
    
    public void removerConexion()
    {
        this.listaConexiones.remove(this.listaConexiones.getLast());
        this.repaint();
        
    }

    public LinkedList<Conexion> getListaConexiones() {
        return listaConexiones;
    }

    public void setListaConexiones(LinkedList<Conexion> listaConexiones) {
        this.listaConexiones = listaConexiones;
    }

    public Point getFin() {
        return fin;
    }

    public void setFin(Point fin) {
        this.fin = fin;
    }

    public Point getIni() {
        return ini;
    }

    public void setIni(Point ini) {
        this.ini = ini;
    }
    
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        setBackground(new java.awt.Color(255, 255, 255));
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 523, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 438, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents

    
    private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked
        
        if(this.arratrarDispositivo)
        {
            BotonPersonalizado b = new BotonPersonalizado("PC-1",BotonPersonalizado.PC, new Point(evt.getX(),evt.getY()));
            b.setPanelPrincipal(this);
        
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
            this.setLayout(layout);
            layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(evt.getX()-70, evt.getX()-70, evt.getX()-70)
                .addComponent(b)
                .addContainerGap(432, Short.MAX_VALUE))
                    );
            
            layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(evt.getY()-70, evt.getY()-70, evt.getY()-70)
                .addComponent(b)
                .addContainerGap(390, Short.MAX_VALUE))
                    );
            
            this.setCursor(PanelPrincipalV2.cursorPredeterminado);
            this.setArratrarDispositivo(false);
           
        }
        
    }//GEN-LAST:event_formMouseClicked

    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables

public void setCursor(int tipoCursor)
{
    switch(tipoCursor)
    {
        case 1://cursor prederteminado
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
            break;
        case 2:
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.MOVE_CURSOR));
            break;
        case 3:
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
            break;
        case 4:
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
            break;
        case 5:
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
            break;
        case 6://cursor de imagen
            java.awt.Image imagen= Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tsb/cambioDeCursor/computer.png")); 
            java.awt.Cursor a = new java.awt.Cursor(1);
            a =Toolkit.getDefaultToolkit().createCustomCursor(imagen, new java.awt.Point(1,1) , "pepe");
            this.setCursor(a);
            break;
    }
}


 @Override
    public void paintComponent(Graphics g){
     
        super.paintComponent(g);
        for (Conexion  figura : listaConexiones)
        {
            figura.dibujar(g);
        }
    }
 
    public void empiezaDibujar(Point p){
        ConexionActual=new Conexion(Conexion.fibra,p,null);
        ini=p;
        fin=p;
        gc=getGraphics();
        gc.setXORMode(getBackground());
        ConexionActual.dibujar(gc, ini, fin);
    }

    public void dibuja(Point p){
        
        ConexionActual.dibujar(gc, ini, fin);
        fin=p;
        ConexionActual.dibujar(gc, ini, fin);
    }

    public void terminaDibujar(){
        ConexionActual.dibujar(gc, ini, fin);
        gc.setPaintMode();
        ConexionActual.dibujar(gc, ini, fin);
        gc.dispose();
        listaConexiones.add(ConexionActual);
        this.setSeEstaConectando(false);
    }
    
    public void empiezaDibujar2(LinkedList<Conexion> listaConexines){
        
        this.coneccionesActuales=listaConexines;
        gc=getGraphics();
        gc.setXORMode(getBackground());
    }

    public void dibuja2(Point mouse, Point ini)
    {
        Iterator iter= coneccionesActuales.iterator();
        while(iter.hasNext())
        {
            Conexion c= (Conexion)iter.next();
            
            if(ini.x==c.getIni().x && ini.y==c.getIni().y)
            {//Se mueve el punto de inicio
                c.dibujar(gc, c.getIni(), c.getFin());
                c.setIni(mouse);
                c.dibujar(gc, mouse, c.getFin());
            }
            else
            {
                c.dibujar(gc, c.getIni(), c.getFin());
                c.setFin(mouse);
                c.dibujar(gc, c.getIni(), mouse);
            }
            
        }
        this.repaint();
    }

    public void terminaDibujar2()
    {
        Iterator iter= coneccionesActuales.iterator();
        while(iter.hasNext())
        {
             Conexion c= (Conexion)iter.next();
             c.dibujar(gc, c.getIni(), c.getFin());
             gc.setPaintMode();
             c.dibujar(gc, c.getIni(), c.getFin()); 
        }
    }
    
    
    
    public void conexionActualNull()
    {
        this.ConexionActual=null;
        this.ini=null;
        this.fin=null;
        
    }
    
    //**
    /*
     * Metodo para cambiar el color de una conexion cuando se mueve un boton
    */
    public void borrarConexion(Conexion c)
    {
//        //para borrar una coneccion se la pinta de color blanco
//        //c=ConexionActual;
//        if(this.listaConexiones.contains(c))
//        {
//            Iterator iter =this.listaConexiones.listIterator();
//            while(iter.hasNext())
//            {
//                Conexion co=(Conexion)iter.next();
//                co.setColor(Color.WHITE);
//            }
//        }
//        repaint();
//        
//       
//       // gc.clearRect(100, 100, 10, 10);
//       // this.repaint();
//        
////        ConexionActual=c;
////        ConexionActual.borrar(gc);
    }
    
    public BotonPersonalizado hayUnBoton(Point p)
    {
        java.awt.Component  comps[]= this.getComponents();

        for(int i=0;i<comps.length;i++)
        {
             BotonPersonalizado c = (BotonPersonalizado) comps[i];


             for(int j=0;j<200;j++)
             {
                 for(int k=0;k<200;k++)
                 {
                     if(p.getX()-j==c.getX() && p.getY()-k==c.getY())
                     {
                         return c;
                     }
                 }
             }
        }
        return null;
    }
    
    public BotonPersonalizado devolverBoton(Point p)
    {
        java.awt.Component comps[]= this.getComponents();
        
        for(int i=0;i<comps.length;i++)
        {
             BotonPersonalizado c = (BotonPersonalizado) comps[i];


             for(int j=0;j<200;j++)
             {
                 for(int k=0;k<200;k++)
                 {
                     if(p.getX()-j==c.getX() && p.getY()-k==c.getY())
                     {
                         return c;
                     }
                 }
             }
        }
        return null;
    }
    
}
